package com.sromku.bugsnag.dialog; import java.util.List; import org.eclipse.jdt.core.IJavaElement; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.IMessageProvider; import org.eclipse.jface.dialogs.TitleAreaDialog; import org.eclipse.jface.viewers.DoubleClickEvent; import org.eclipse.jface.viewers.IDoubleClickListener; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.TableViewerColumn; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.FormAttachment; import org.eclipse.swt.layout.FormData; import org.eclipse.swt.layout.FormLayout; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Shell; import com.sromku.bugsnag.providers.ClassesLabelProvider; import com.sromku.bugsnag.providers.TableContentProvider; import com.sromku.bugsnag.utils.WorkspaceUtils; public class ClassSelectionDialog extends TitleAreaDialog { private List<IJavaElement> javaElements; private TableViewer tableViewer; private String className; private int line; public ClassSelectionDialog(Shell parentShell, List<IJavaElement> javaElements, String className, int line) { super(parentShell); this.javaElements = javaElements; this.className = className; this.line = line; } @Override public void create() { super.create(); setTitle("Pick a class (" + className + ":" + line + ")"); setMessage("Multiple classes with the same name are found, please pick one (double click)", IMessageProvider.NONE); } @Override protected Control createDialogArea(Composite parent) { Composite area = (Composite) super.createDialogArea(parent); Composite container = new Composite(area, SWT.NONE); container.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); // set the internal layout of the container container.setLayout(new FormLayout()); // create table showing the classes createTable(container); return area; } private void createTable(Composite parent) { FormData formData = new FormData(); formData.bottom = new FormAttachment(100, -5); formData.top = new FormAttachment(0, 5); formData.right = new FormAttachment(100, -5); formData.left = new FormAttachment(0, 5); tableViewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER); tableViewer.getTable().setLayoutData(formData); // columns TableViewerColumn colPath = new TableViewerColumn(tableViewer, SWT.NONE); colPath.getColumn().setWidth(400); colPath.getColumn().setText("Path"); TableViewerColumn colName = new TableViewerColumn(tableViewer, SWT.NONE); colName.getColumn().setWidth(90); colName.getColumn().setText("Class name"); tableViewer.getTable().setHeaderVisible(true); tableViewer.getTable().setLinesVisible(true); // data tableViewer.setContentProvider(new TableContentProvider()); tableViewer.setLabelProvider(new ClassesLabelProvider()); tableViewer.setInput(javaElements); // double click tableViewer.addDoubleClickListener(new IDoubleClickListener() { public void doubleClick(DoubleClickEvent event) { StructuredSelection selection = (StructuredSelection) tableViewer.getSelection(); WorkspaceUtils.openInEditor((IJavaElement)selection.getFirstElement(), line); close(); } }); } @Override protected void createButtonsForButtonBar(Composite parent) { createButton(parent, IDialogConstants.OK_ID, "Close", true); } @Override protected boolean isResizable() { return true; } @Override protected Point getInitialSize() { return new Point(500, 300); } @Override protected void okPressed() { super.okPressed(); } }